package com.example.k8s.hello.common.exception;

import java.util.Objects;

public interface ExAssertI {
    /**
     * 创建异常，并不抛出。用于子类实现。
     *
     * @param message
     * @return
     */
    BizException newException(String message);

    /**
     * 创建异常，并不抛出。用于子类实现。
     *
     * @param t
     * @param message
     * @return
     */
    BizException newException(Throwable t, String message);

    /**
     * 直接抛出异常
     *
     * @param message
     */
    default void thrown(String message) {
        throw newException(message);
    }

    /**
     * 直接抛出异常
     *
     * @param message
     */
    default void thrown(Throwable t, String message) {
        throw newException(t, message);
    }


    /**
     * <p>断言对象<code>obj</code>非空。如果对象<code>obj</code>为空，则抛出异常
     * <p>异常信息<code>message</code>支持传递参数方式，避免在判断之前进行字符串拼接操作
     *
     * @param obj         待判断对象
     * @param message
     */
    default void assertNotNull(Object obj, String message) {
        if (obj == null) {
            throw newException(message);
        }
    }

    /**
     * 断言非空
     *
     * @param obj
     * @param message
     */
    default void assertNotEmpty(String obj, String message) {
        if (obj == null || obj.length() < 1) {
            throw newException(message);
        }
    }

    /**
     * 断言为真
     *
     * @param success
     * @param message
     */
    default void assertTrue(boolean success, String message) {
        if (!success) {
            throw newException(message);
        }
    }

    /**
     * 断言相等
     *
     * @param src
     * @param target
     * @param message
     */
    default void assertEquals(Object src, Object target, String message) {
        if (!Objects.equals(src, target)) {
            throw newException(message);
        }
    }


}
